package proyecto.web;

import java.util.Collection;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
import proyecto.dao.PacienteDAO;
import proyecto.dao.PacienteDaoPaul;
import proyecto.excepcion.DAOExcepcion;
import proyecto.modelo.Paciente;
import proyecto.service.PacienteService;

public class PacientesController extends MultiActionController {

    private PacienteService pacienteService;

    public PacienteService getPacienteService() {
        return pacienteService;
    }

    public void setPacienteService(PacienteService pacienteService) {
        this.pacienteService = pacienteService;
    }

    private PacienteDaoPaul pacienteDaoPaul;

    public PacienteDaoPaul getPacienteDaoPaul() {
        return pacienteDaoPaul;
    }

    public void setPacienteDaoPaul(PacienteDaoPaul pacienteDaoPaul) {
        this.pacienteDaoPaul = pacienteDaoPaul;
    }

    public ModelAndView index(HttpServletRequest request, HttpServletResponse response) {
        //return new ModelAndView("pacientes");
        ModelAndView mv = new ModelAndView("pacientes");
        try {
            mv.addObject("paciente", pacienteService.listarPacientes());
        } catch (DAOExcepcion ex) {
            Logger.getLogger(PacientesController.class.getName()).log(Level.SEVERE, null, ex);
        }
        return mv;
    }

        public ModelAndView insertarPaciente(HttpServletRequest request, HttpServletResponse response) {
        System.out.println("Entro a la llamada a insertar paciente");
            //return new ModelAndView("pacientes");
                ModelAndView mv = new ModelAndView("pacientes");
        try {
            mv.addObject("paciente", pacienteService.listarPacientes());
        } catch (DAOExcepcion ex) {
            Logger.getLogger(PacientesController.class.getName()).log(Level.SEVERE, null, ex);
        }
                return mv;
    }

     public ModelAndView doInsertarPaciente(HttpServletRequest request, HttpServletResponse response) {
         ModelAndView mv = new ModelAndView("pacientes");
        try {
            //Usuario vo = new Usuario();
            //SimpleDateFormat df=new SimpleDateFormat("dd/mm/yyyy");
            Paciente P = new Paciente();
            P.setNombres(request.getParameter("nomPaciente"));
            P.setApellidos(request.getParameter("apPaciente"));
            P.setSexo(request.getParameter("Sexo"));
            P.setFec_nacimiento(request.getParameter("FecNac"));
            P.setTipo_documento(request.getParameter("TipoDoc"));
            P.setNumero_documento(request.getParameter("NumDoc"));
            P.setEmail(request.getParameter("Email"));
            P.setTelefono(request.getParameter("Telefono"));
            P.setLogin(request.getParameter("Login"));
            P.setPassword(request.getParameter("Pass"));
            System.out.println("Creo todo Paciente");
            pacienteService.registrarNuevoPaciente(P);
            //pacienteDaoPaul.insertarPaciente(P);
            
            mv.addObject("paciente", pacienteService.listarPacientes());
            
        } catch (DAOExcepcion ex) {
            Logger.getLogger(PacientesController.class.getName()).log(Level.SEVERE, null, ex);
        }
        return mv;
    }

    /*
    public ModelAndView buscar(HttpServletRequest request, HttpServletResponse response) {
        String nombres = request.getParameter("nombre");
        try {
            Collection<Rol> roles = rolService.buscarPorNombre(nombres);
            System.out.println(roles);
            request.setAttribute("roles", roles);
        } catch (DAOExcepcion ex) {
            System.err.println(ex.toString());
        }
        return new ModelAndView("/admin/rol_mantener");
    }*/

    public ModelAndView nuevo(HttpServletRequest request, HttpServletResponse response) {
        return new ModelAndView("/admin/rol_nuevo");
    }

    /*
    public ModelAndView insertar(HttpServletRequest request, HttpServletResponse response) {
        Rol vo = new Rol();
        vo.setRolNombre(request.getParameter("nombre"));
        vo.setDescripcion(request.getParameter("descripcion"));
        try {
            rolService.insertar(vo);
        } catch (DAOExcepcion e) {
            System.err.println(e.toString());
        }
        return new ModelAndView("redirect:/rol_mantener.htm");
    }

    public ModelAndView eliminar(HttpServletRequest request, HttpServletResponse response) {
        String rolNombre = request.getParameter("rolNombre");
        try {
            rolService.eliminar(rolNombre);
        } catch (DAOExcepcion ex) {
            System.err.println(ex.toString());
        }
        return new ModelAndView("redirect:/rol_mantener.htm");
    }*/

    public ModelAndView obtener(HttpServletRequest request, HttpServletResponse response) {
        
        HttpSession session = request.getSession();
        Paciente paciente_actual = (Paciente)(session.getAttribute("PACIENTE_ACTUAL"));

        System.out.println(paciente_actual.getNombres() + " " + paciente_actual.getApellidos());

        request.setAttribute("Paciente", paciente_actual);
        return new ModelAndView("/intranet_pacientes/pacientes_actualizar");
    }

    
    public ModelAndView actualizar(HttpServletRequest request, HttpServletResponse response) {
        HttpSession session = request.getSession();
        Paciente sessionPaciente = (Paciente)(session.getAttribute("PACIENTE_ACTUAL"));
        System.out.println("Paciente Service: " +  pacienteService);
        Paciente paciente = new Paciente();
        paciente.setId_paciente(Integer.parseInt(request.getParameter("txtid")));
        paciente.setNombres(request.getParameter("txtnombres"));
        paciente.setApellidos(request.getParameter("txtapellidos"));
        paciente.setSexo(request.getParameter("txtsexo"));
        paciente.setTelefono(request.getParameter("txttelefono"));
        paciente.setEmail(request.getParameter("txtemail"));
        paciente.setNumero_documento(request.getParameter("txtnumero_documento"));
        paciente.setTipo_documento(request.getParameter("txttipo_documento"));
        paciente.setLogin(sessionPaciente.getLogin());
        paciente.setPassword(sessionPaciente.getPassword());

        try {
            Paciente newPaciente = pacienteService.actualizar(paciente);
            
            session.setAttribute("PACIENTE_ACTUAL", newPaciente);
        } catch (DAOExcepcion e) {
            System.err.println("Error: " + e.getMessage());
        }
        return new ModelAndView("/pacientes_principal");
    }

    public ModelAndView irACambiarPassword(HttpServletRequest request, HttpServletResponse response) {
        
        HttpSession session = request.getSession();
        Paciente paciente_actual = (Paciente)(session.getAttribute("PACIENTE_ACTUAL"));

        System.out.println(paciente_actual.getNombres() + " " + paciente_actual.getApellidos());

        request.setAttribute("Paciente", paciente_actual);
        return new ModelAndView("/intranet_pacientes/pacientes_actualizar_password");
    }

    public ModelAndView cambiarPassword(HttpServletRequest request, HttpServletResponse response) {

        String passActual = request.getParameter("txtPassActual");
        String passNuevo = request.getParameter("txtNuevoPass");
        String passNuevoRepi = request.getParameter("txtRepiNuevoPass");

        HttpSession session = request.getSession();
        Paciente paciente_actual = (Paciente)(session.getAttribute("PACIENTE_ACTUAL"));

        try {
            boolean existe = pacienteService.validarPassword(paciente_actual.getLogin(), passActual);
            if(existe){
                //Actualizo
                if(passNuevo.equals(passNuevoRepi)){
                    paciente_actual.setPassword(passNuevo);
                    pacienteService.actualizarPassword(paciente_actual);
                    request.setAttribute("Mensaje", "Se Cambio el Password de forma Exitosa!");

                }else{
                    request.setAttribute("Mensaje", "Los Nuevos Passwords no coinciden!");
                }
                
            }else{
                //Password No es Correcto
                request.setAttribute("Mensaje", "El Password actual no es correcto!");
            }
        } catch (DAOExcepcion e) {
            System.err.println("Error: " + e.getMessage());
        }
        
        return new ModelAndView("/intranet_pacientes/pacientes_actualizar_password");
    }


    public ModelAndView listarPacientes(HttpServletRequest request, HttpServletResponse response) {

        try {
            Collection<Paciente> resultados = pacienteService.listarPacientes();
            System.out.println(resultados);
            request.setAttribute("resultados", resultados);
        } catch (DAOExcepcion ex) {
            System.err.println(ex.toString());
        }

        return new ModelAndView("/intranet_laboratoristas/listar_pacientes");
    }
    
}
